package tut.Map.weakHashMap.cacLoaireference.strong_ex2;

import java.util.ArrayList;
import java.util.List;

//  Ta sửa code ở ví dụ 1 thành như sau (trước khi cho strong = null ta cho đối tượng vào 1 list):
public class StrongRefDemo  {
    public static class Something {
        protected void finalize() {
            System.out.println("Đây là lời của tôi trước khi vĩnh biệt");
        }
    }

    public static void main(String args[]) throws InterruptedException {
        Something strong = new Something();
        List<Something> list = new ArrayList<Something>();
        list.add(strong);
        strong=null;
        list=null;  // co dong nay se in ra cau vinh biet
        System.gc();
        Thread.sleep(5000);
        System.out.println("Mọi thứ kết thúc");
    }
}
/*
 Giải thích:
Nhờ ta cho đối tượng Something vào list nên dù sau đó ta cho strong = null thì
nó vẫn là strongly reachable object nên không bị Garbage Collector dọn dẹp, kết quả là KHÔNG in ra dòng chữ "Đây là lời của tôi trước khi vĩnh biệt"
Còn nếu ta thêm dòng list = null như sau thì dòng chữ "Đây là lời của tôi trước khi vĩnh biệt" sẽ được in ra bởi vì đối tượng something khi đó hoàn toàn bị cô lập.
*/